// filepath: /home/debi/IdeaProjects/LearnRust/Work/basic/src/corex/cellx/cellx.rs
// stdx/cellx.rs
// CRITICAL: Cell 与 RefCell 示例（内部可变性）。
// AUTO_COMMENT: 展示如何在不可变引用下修改数据。

#[allow(dead_code)]
pub fn stdx_examples_cellx() {
    use std::cell::{Cell, RefCell};

    // CRITICAL: Cell 用于 Copy 类型
    let cell = Cell::new(5);
    cell.set(10);
    let value = cell.get();

    // CRITICAL: RefCell 用于非 Copy 类型
    let refcell = RefCell::new(vec![1, 2, 3]);
    {
        let mut borrowed = refcell.borrow_mut();
        borrowed.push(4);
    }
    let len = refcell.borrow().len();

    // CRITICAL: 运行时借用检查
    // refcell.borrow_mut(); // 会 panic 如果已有借用

    // CRITICAL: try_borrow
    let try_borrow = refcell.try_borrow();
    assert!(try_borrow.is_ok());

    let _ = (value, len, try_borrow);
}
